查看原文
其他

R语言执行多元方差分析

生信小白鱼 鲤小白 小白鱼的生统笔记 2022-05-08
多元方差分析(MANOVA)和稳健多元方差分析(稳健MANOVA)在R中实现

前文已分别简介了单因素方差分析(单因素ANOVA)、单因素协方差分析(单因素ANCOVA)、双因素方差分析(双因素ANOVA)、重复测量方差分析(重复测量ANOVA)在R语言中的实现方法。通过前文几种常见的方差分析示例,我们可知当因子变量只有一组时,称为单因素方差分析,因子变量有两组时,称为双因素方差分析,当因子变量存在多组时,即为多因素方差分析(因子变量越多,解释起来也就越复杂,所以一般不会涉及更多因素);存在协变量时,称为协方差分析。

在这些方差分析示例中,因变量只有一种,即一组或多组因变量对应一个或多个因子变量或协变量。当因变量不止一个时,即一组或多组因子变量对应了多个因变量时,可使用多元方差分析(MANOVA)。同样地,当因子变量只有一组时,称为单因素多元方差分析,因子变量有多组时,称为多因素多元方差分析。本篇将展示一例单因素多元方差分析的示例。


本文使用的作图数据的网盘链接(提取码z4w4):https://pan.baidu.com/s/1J-9GsmoHuQ_CEpxeWyEQsA

数据预处理


示例数据说明

  

我们首先将示例数据读到R中,并从中挑选部分数据作为演示。

#读入文件,添加分组信息
soil <- read.table('soil.txt', sep = '\t', header = TRUE, stringsAsFactors = FALSE, check.names = FALSE)
group <- read.table('group.txt', sep = '\t', header = TRUE, stringsAsFactors = FALSE, check.names = FALSE)
soil <- merge(soil, group, by = 'sample')

#选择数据,并将分组列转换为因子变量
muti <- soil[ ,c('sample', 'treat', 'chao1', 'pH', 'NR')]
muti$treat <- factor(muti$treat)
str(muti)
head(muti)

假设存在这么一个关注的问题:

我们采集了来源于同一环境中的土壤(土壤类型一致),分为了3组,分别添加了三种类型的化学物质(a、b、c),并将土壤孵育了一定的时间(时间相同)。最后取样后,通过16S测序,获得了土壤细菌群落的Alpha多样性指数;通过土壤理化测定,获得了土壤中多种理化指标;通过土壤酶活性测定,获得了主要的几种土壤酶活性数据。通过这些数据,我们想要得知土壤细菌群落的Alpha指数、土壤理化、以及土壤酶活性是否因所添加化学物质类型不同而显著改变。对应于上述挑选出的测试数据“muti”:sample,试验样本名称,土壤类型完全相同,土壤孵育时间完全一致;treat,在土壤中添加的三种化学物质(a、b、c),这列作为分组列,需要转换为因子变量类型,各组处理间相互独立;chao1,Alpha多样性指数中的Chao1指数,数值变量;pH,土壤理化数据中的pH值数据,数值变量;NR,土壤硝酸还原酶活性,数值变量。这里存在3组因变量:“土壤菌群Chao1指数”、“土壤pH值”、“土壤硝酸还原酶(NR)活性”,对应于1组因子变量“化学物质类型”,因此我们使用单因素多元方差分析(单因素MANOVA),探究土壤细菌群落Chao1指数、土壤pH、土壤硝酸还原酶(NR)活性是否因所添加化学物质类型不同而发生显著改变。


评估检验的假设条件

  

单因素MANOVA有两个前提假设,一是多元正态性,二是方差-协方差矩阵同质性。

 

多元正态性验证

所谓多元正态性,即指因变量组合成的向量服从一个多元正态分布,在R中同样可使用Q-Q图验证多元正态性。#QQ-plot 检验多元正态性
y <- cbind(muti$NR, muti$pH, muti$chao1)
coord <- qqplot(qchisq(ppoints(nrow(y)), df = ncol(y)), mahalanobis(y, colMeans(y), cov(y)))
abline(a = 0, b = 1)

若数据服从多元正态性,则点将落在直线上。根据结果可知,我们的数据基本服从多元正态性。

不过我们看到似乎有两个离群点。

这时可以继续使用identify(),交互式地在图中点击这两个点,查看它们是那些样本(本示例中是C4_2和C4_3两个样本)。若有必要,可以将这两个样本剔除,然后再继续下一步(本示例演示不再将它们删除,直接进入下一步分析)。

#可以交互式展示样本位置,可用于观测离群点
identify(coord$x, coord$y, labels = muti$sample)


方差-协方差矩阵同质性验证
方差-协方差矩阵同质性即指各组的协方差矩阵相同,通常可使用Box’s M检验来评估该假设。注:Box’s M检验对正态性假设很敏感。
这里使用biotools包中的boxM()函数来实现,详情可使用?boxM参阅帮助文档。#Box's M 检验验证方差-协方差矩阵同质性(p 值大于 0.05 即说明各组的协方差矩阵相同)
library(biotools)
boxM(muti[ ,c('chao1', 'pH', 'NR')], muti[ ,'treat'])很遗憾,我们的数据并未通过前提假设。


单因素多元方差分析(单因素MANOVA)


单因素MANOVA


一般来讲,相较于一元的方差分析,MANOVA的前提假设非常地苛刻,大多数情况下都是直接拒绝的。我们的数据就未通过前提假设,理论上不能再执行单因素MANOVA了。但是请允许我继续使用单因素MANOVA来做,仅仅用来作个方法的演示。

前提假设未满足的前提下,可以尝试使用稳健多元方差分析(稳健MANOVA,如rrcov包Wilks.test(),参见下文);或者更换非参数MANOVA,如置换多元方差分析(PERMANOVA)(vegan包adonis())。

#假设通过,执行单因素 MANOVA,详情使用 ?manova 查看帮助。
fit <- manova(cbind(NR, pH, chao1)~treat, data = muti)
summary(fit) #查看整体结果
summary.aov(fit) #对每一个变量做单因素方差分析

结果中,首先整体显著,其次对各因变量的结果也显著,即土壤细菌群落Chao1指数、土壤pH、土壤硝酸还原酶(NR)活性均因所添加化学物质类型不同而发生显著改变。

对于3个子单因素方差分析(单因素ANOVA)结果,我们还可继续使用多重比较(Tukey HSD检验),探究对于每个因变量,3种化学物质的处理结果之间更具体的差异是怎样的。可参考前文单因素ANOVA


稳健单因素MANOVA


如果多元正态性或方差-协方差矩阵同质性的前提假设未能满足(我们的示例数据即是如此),或者比较担心多元离群点的影响,那么可以尝试稳健多元方差分析(稳健MANOVA)。对于我们的示例数据,即对应了稳健单因素多元方差分析(稳健单因素MANOVA)。#假设未通过,可使用稳健单因素 MANOVA
#通过 rrcov 包中的 Wilks.test() 函数实现,详情可使用 ?Wilks.test 查看帮助
library(rrcov)
muti$treat <- factor(muti$treat)
Wilks.test(treat~., data = muti[c('treat', 'NR', 'pH', 'chao1')], method = 'c')

结果表明,土壤细菌群落Chao1指数、土壤pH、土壤硝酸还原酶(NR)活性均因所添加化学物质类型不同而发生显著改变。



链接

R语言执行重复测量方差分析

R语言执行双因素方差分析

R语言执行单因素协方差分析

R语言执行单因素方差分析及多重比较

R语言执行两组间差异分析Wilcox秩和检验

R语言执行两组间差异分析T检验

R语言绘制蝴蝶(柱状)图

R语言绘制分组柱状图

R语言绘制堆叠柱状图

R语言绘制星形图

R语言绘制饼图(扇形图)

R语言绘制花瓣图



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存